/* 吃进去的是url挤出来的是Promise,成功时履约数据，失败时reject错误 */
// function rq(url="https://www.taobao.com") {
    function rq(url) {
        return new Promise((resolve, reject) => {
          setTimeout(() => {
            Math.random() > 0.5 ? resolve(`${url}对应的页面`) : reject("网络错误");
          }, 1000);
        });
      }
      
      // async function testRq() {
      //   try {
      //     const data = await rq("https://www.taobao.com");
      //     console.log("data=", data);
      //   } catch (err) {
      //     console.log("err=", err);
      //   }
      // }
      
      
      
      /* --------------------------------------------------------------------- */
      /* 调用asyncFn并等待其resolve结果,如果ms毫秒内没能resolve,则直接报超时  */
      function execWithTimeout(asyncFn, ms) {
        return new Promise(
            
          async (resolve, reject) => {
              // 放到ms毫秒以后干
              let timer = setTimeout(() => {
                  reject("timeout");
              }, ms);
      
              /* 得有机会resolve */
              /* 请求网络数据，待其返回数据，resolve数据 */
              // try {
              //     const data = await asyncFn();
              //     resolve(data);
              // } catch (err) {
              //     reject(err);
              // }
              // clearTimeout(timer);
      
              asyncFn()
              .then(
                  data => resolve(data)
              )
              .catch(
                  err => reject(err)
              )
              .finally(
                  ()=> clearTimeout(timer)
              )
      
          }
        
        );
      }
      
      // 给rq函数绑定第一个入参为https://www.baidu.com 得到新函数newRq
      // const newRq = rq.bind(null,"https://www.baidu.com")
      // execWithTimeout(newRq,3000)
      // execWithTimeout(rq.bind(null,"https://www.baidu.com"),3000)
      
      // const fn1 = ()=>rq("https://www.163.com")
      function fn1(){
          return rq("https://www.163.com")
      }
      
      execWithTimeout(
          // ()=>{ return rq("https://www.163.com")},
          // ()=>rq("https://www.163.com"),
          fn1,
          3000
      )
      .then(
          value => console.log("value=",value)
      )
      .catch(
          err=>console.log("err=",err)
      )
      